package GUI;
import java.rmi.RemoteException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.MutableComboBoxModel;
import javax.swing.event.ListDataListener;
import Applikationslogik.*;

// QUELLE: http://java-tutorial.org/comboboxmodel.html
// WIR HABEN AUCH NOCH EINEN FEHLER KORRIGIERT SIEHE FORENPOST
// http://www.java-tutorial.org/forum/viewtopic.php?f=6&t=34

public class Person_ComboBoxModel implements MutableComboBoxModel
{
    // Das Attribut eintraege stellt unsere Listelemente dar
    Vector eintraege = new Vector();
    // Index für selektierten Eintrag
    int index=-1;

     /* Hier geben wir zurück, was als selektierter Eintrag
        in der JComboBox angezeigt werden soll */
    public Object getSelectedItem()
    {
        Object test = new Object();
        if(index >= 0)
        {
           
                 test = ((Person) eintraege.elementAt(index));
            
            
            return test;

        }
        else
        {
            return "Geht nicht";
        }
    }

    // Diese Funktion wird beim Selektieren eines Eintrages aufgerufen
    // Dort ermitteln wir den Index für das ausgewählte Element
    // anItem ist der in der JComoboBox ausgewählte Eintrag
    public void setSelectedItem(Object anItem)
    {
        try {
           
        for(int i = 0; i< eintraege.size(); i++)
        {
                if (anItem.equals(((Person)eintraege.elementAt(i)).get_voller_name())) {
                    index = i;                    
                    break;
                }

        }
        } catch (RemoteException ex) {
            }
    }

    // Hier liefern wir die Anzahl der Elemente in unserer Liste zurück
    public int getSize()
    {
        return eintraege.size();
    }

    // Hier wird ein Element an einer bestimmten Stelle zurückgegeben
    // Hier wird ein Element an einer bestimmten Stelle zurückgegeben
    public Object getElementAt(int index)
    {
        Object test = new Object();
        try {
            test = ((Person) eintraege.elementAt(index)).get_voller_name();
        } catch (RemoteException ex) {
           
        }
        return test;
    }


    public void addElement(Object obj)
    {
        if(!eintraege.contains(obj))
        {
            int i=0;
            try {
                while (i < eintraege.size() && ((Person) eintraege.get(i)).get_person_id() <= ((Person) obj).get_person_id()) {
                    i++;
                }
            } catch (RemoteException ex) {
               
            }

            eintraege.add(i, obj);
            if(index==-1)index=0;
        }
    }

    // Hier entfernen wir ein Objekt aus der Liste
    public void removeElement(Object obj)
    {
        if(eintraege.contains(obj))
        {
            eintraege.remove(obj);
        }
    }

    // Hier fügen wir ein Element an einer bestimmten Position ein
    public void insertElementAt(Object obj, int index)
    {
        eintraege.add(index, obj);
    }

    // Hier entfernen wir ein Element aus der Liste mit dem übergebenem Index
    public void removeElementAt(int index)
    {
        if(eintraege.size()> index)
        {
            eintraege.removeElementAt(index);
        }
    }

    // Die beiden folgenden Methoden berücksichtigen wir hier nicht
    public void addListDataListener(ListDataListener l)
    {
    }

    public void removeListDataListener(ListDataListener l)
    {
    }
}